\section{交叉引用}

使用了\verb|\caption|的\texttt{figure}会自动生成一个编号，你也可以用\texttt{equation}环境创建一个带自动编号的公式。这类带自动编号的对象支持交叉引用——你可以用 \verb|\label{标签名}|给一个这样的对象打上一个标签，然后用\verb|\ref{标签名}|引用这个对象，具体用法如下：
\\
\begin{tabular}[c]{cc} \\
\begin{minipage}{0.48\textwidth} \small
\begin{verbatim}
二端口的Z参数方程为：
\begin{equation}
\label{eq_z}
\boldsymbol{u}=\boldsymbol{Zi}
\end{equation}
由\ref{eq_z}式可知：
\[
\boldsymbol{i}=
\boldsymbol{Z}^{-1}\boldsymbol{u}
\]
\end{verbatim}
\end{minipage}
&
\begin{minipage}{0.48\textwidth} \small \setlength{\parindent}{2em}
二端口的Z参数方程为：
\begin{equation}
\label{eq_z}
\boldsymbol{u}=\boldsymbol{Zi}
\end{equation}
由\ref{eq_z}式可知：
\[
\boldsymbol{i}=\boldsymbol{Z}^{-1}\boldsymbol{u}
\]
\end{minipage}
\\ \\
\end{tabular}
这样做的好处是\LaTeX 会自动帮你管理编号。同理，使用\verb|\pageref{标签名}|可以插入对象所在的页码。为了正确生成交叉引用，你可能需要将代码编译两次。

\section{自定义命令}

使用\texttt{\textbackslash newcommand}可以创建自己的命令。

例如微分符号是一个正体的d，需要用\texttt{\textbackslash mathrm\{d\}}输入，每次都打这么多字很麻烦，这时候可以用
\begin{verbatim}
\newcommand{\dif}{\mathrm{d}}
\end{verbatim}
创建一个新的命令\verb|\dif|，这样每次输入一个\verb|\dif|就可以得到一个微分符号。

如果使用\verb|\newcommand|创建的命令与已有命令重名则会出错。而使用 \verb|\renewcommand| 可以覆盖重名的命令。\verb|\providecommand|则会在重名时沿用旧命令，没有重名时创建新命令。

注意请将\verb|\newcommand|、\verb|\renewcommand|、\verb|\providecommand|写在导言区所有 \texttt{\textbackslash usepackage}的后面，并且尽量不要让自定义命令和已有的东西重名，除非你有意这么做，否则可能出现奇奇怪怪的错误。其中一个原因是\LaTeX 的命令是从上往下执行的，如果你先创建了一个命令，然后你使用的宏包里碰巧有重名的命令，就可能发生奇奇怪怪的事情。

\section{为什么有奇奇怪怪的错误}

很多时候你会发现一大堆奇奇怪怪的错误导致编译不通过，或者文章被排版成了奇奇怪怪的样子。但是当你检查了你的代码之后，发现代码完全是合乎逻辑的。

这种错误一般是\LaTeX 自身的特性导致的。\LaTeX 是一种宏语言，也就意味着它在处理命令和环境的时候，并不是采取逐层解释的方式，而是采取文本替换的方式。

这是什么意思？让我们举一个\LaTeX 之外的例子。假如你定义了一个函数$f(x,y)=x\div y$。现在要计算$f(1+2,3+4)$。

按照``正常''思路，你先计算$1+2=3$，$3+4=7$，然后计算$3\div 7=0.429$，从而得到结果0.429。但是按照宏语言的思路，它会先把``$x\div y$''中的$x$替换为$1+2$，$y$替换为$3+4$，从而得到$1+2\div 3+4$。计算得到结果5.67。

在\LaTeX 中，导致这一类结果的主要原因是在命令中嵌套了环境，或者是使用了过于复杂的嵌套结构。建议在遇到这类问题时可以试一下用另一种更简洁的方案实现想要的效果。

\section{查看文档与获取帮助}

有很多种途径可以获取\LaTeX 相关的文档与帮助。“文档”在计算机领域通常指软件的说明书。你安装的\LaTeX 发行版可能就提供了用于查看文档的工具。例如，对于TeXLive，在命令行上使用\verb|texdoc|命令可以查看帮助，如\verb|texdoc amsmath|可以查看\textit{amsmath}宏包的文档。Windows平台的许多发行版还会提供图形界面的文档查看器。也可以到\url{https://www.ctan.org/pkg/}找各个宏包的文档。一个宏包的文档会给出宏包功能的简要介绍，然后详细地说明该宏包提供的每个命令与环境的用法。阅读文档时无需通篇阅读，只需仔细阅读自己需要的部分即可。教程类的文章通常只会讲解最为常用的部分，而不会提供太多细节；网络上的博客通常只会给出一个示例，却不会详细说明示例为什么这么写。因此，教程和博客类的文章可以告诉你哪些宏包、命令和环境可以用来实现你想要的效果，而宏包的文档则会详细地告诉你这个宏包以及其提供的命令和环境该怎么用。学会如何查找资料、阅读资料也是技术类人才的必修课。

\section{借助Python与\LaTeX 进行自动化}

对于编写\LaTeX 文档过程中的一些重复性较高的工作，可以使用编程的方式进行自动化。自动化的方法之一是编写一个生成\LaTeX 源码的程序。例如，可以编写程序用于生成子图数量较多的插图，或是将CSV格式的表格转换为\LaTeX {} tabular。

你可以用任何你喜欢的编程语言，但是Python语言由于其丰富的软件包生态，使其在此类自动化工作中脱颖而出。例如，使用可以操作PDF内容的\verb|PyPDF2|，你可以创建、编辑、提取和合并PDF文件。由于\LaTeX 的\verb|\includegraphics|命令可以插入PDF文件，你甚至可以编写一个脚本，使用\verb|PyPDF2|对已有文档进行提取、拆分，然后生成一个\LaTeX 文件，使用\verb|\includegraphics|对提取、拆分出的部分进行重新组合。
